package org.wiigee.device;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;

public class AndroidDevice extends Device implements SensorEventListener {

    private float x0, y0, z0, x1, y1, z1;
    private SensorManager sensorManager;

    public AndroidDevice(Context context) {
        super(true);
        
        this.x0 = 0;
        this.y0 = -SensorManager.STANDARD_GRAVITY;
        this.z0 = 0;
        this.x1 = SensorManager.STANDARD_GRAVITY;
        this.y1 = 0;
        this.z1 = SensorManager.STANDARD_GRAVITY;

        this.sensorManager = (SensorManager)
                context.getSystemService(Context.SENSOR_SERVICE);
        Sensor accSensor = this.sensorManager.
                getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        this.sensorManager.
                registerListener(this, accSensor,
                SensorManager.SENSOR_DELAY_UI);
    }

    public void close() {
        if(this.sensorManager!=null)
            this.sensorManager.unregisterListener(this);
    }

    public void onSensorChanged(SensorEvent sevent) {
        Sensor sensor = sevent.sensor;
        float[] values = sevent.values;

        if (this.accelerationEnabled && sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

            double x, y, z;
            float xraw, yraw, zraw;
                
            xraw = values[SensorManager.DATA_X];
                yraw = values[SensorManager.DATA_Y];
                zraw = values[SensorManager.DATA_Z];

                x = (double) (xraw - x0) / (double) (x1 - x0);
                y = (double) (yraw - y0) / (double) (y1 - y0);
                z = (double) (zraw - z0) / (double) (z1 - z0);

                this.fireAccelerationEvent(new double[] {x, y, z});
        }
    }

    public void onAccuracyChanged(Sensor arg0, int arg1) {
        
    }

}
